![Auth0をSAML Identity Provider/SAML Service Providerとして使う #Auth0JP](https://devio2023-media.developers.io/wp-content/uploads/2019/03/auth0-eyecatch.001.png)
Auth0をSAML Identity Provider/SAML Service Providerとして使う #Auth0JP
Auth0のSAML連携の機能
Auth0はSAML(Security Assertion Markup Language)連携について、以下の機能を持っています。
- SAML Identity Provider(SAML IdP)として : アプリケーションにログインする手段としてSAMLの認証プロバイダとなる
- SAML Service Provider(SAML SP)として : 接続先(Connection)をSAMLで連携する(SAML Identity Providerからシングルサインオンさせる)
今回はSAML Identity Provider(SAML IdP)、SAML Service Provider(SAML SP)のそれぞれの機能をAuth0にテナントを2つ用意して試します。
Auth0のブログで紹介されている内容もかなり参考になりますので、あわせてご覧ください。
「SAML Identity Providerとして使う」とは?
特にエンタープライズ向けのサービス・ツールでは、組織で使う際のID管理を「SAML Identity Providerで行う」形式が取られている場合が多いです。例えば以下の記事のようなケースです。
- Auth0を連携してTableau Serverの認証をSSOにしてみる #tableau | DevelopersIO
- Alteryx ServerでSAML認証を試す(Auth0編) | DevelopersIO
こちらの2つの記事では、Tableau Server、Alteryx Serverといったサービスで、Auth0をSAML Identity Providerとして使っています。これが実現できるのは、Tableau Server、Alteryx ServerがそれぞれSAML認証をサポートしているからです。
SAMLの用語として、SAML連携をサポートしている認証プロバイダをSAML Identity Providerと呼びます。
「SAML Service Provider(SAML SP)として使う」とは?
Auth0の最大の特徴は 多種多彩な接続方式 にあります。ソーシャルコネクション(Google, LINE, Facebook, Amazonなど)に目が行きがちですが、エンタープライズ向けの連携ができるように、SAMLやAD、LDAPなどの連携機能も提供しています。
特にエンタープライズ向けの認証基盤製品はSAML連携をサポートしていることが多いです。
SAMLの用語として、SAMLでシングルサインオンさせる先をSAML Service Providerと呼びます。
2つのテナントで試してみる
今回は Auth0に2つのテナントを用意 し、SAML IdP / SAML SPのそれぞれの機能を持たせた構成を作ってみたいと思います。
- TenantA(SAML IdPテナント) : SAML IdPとして使うテナント
- TenantB(SAML SPテナント) : SAML SPとして使うテナント
|App| <-> |TenantB| <-> |TenantA|
TenantA(SAML IdPテナント)を設定する
まずはSAML IdPテナントとなるTenantAの設定です。テナント自体は作成済みの前提で進めますので、あらかじめ作成しておきましょう。
「CREATE APPLICATION」をクリックし、Application(Client)を新規作成します。
Application Typeは「Regular Web Application」を選択しましょう。
項目 | 値 |
---|---|
Name | SAML IdP App |
Application Type | Regular Web Application |
次に、TenantB(SAML SPテナント)にSAML連携を設定するための情報を集めます。「Settings」タブをクリックし、下にスクロールし「Show Advanced Settings」をクリックします。
「Certificates」タブを開き「DOWNLOAD CERTIFICATE」をクリックし、PEM形式の証明書をダウンロードします。
次に「Endpoints」タブを SAML Protocol URL と SAML Metadata URL のURLをコピーし、テキストファイルなどに記録しておきます。こちらはTenantB(SAML SPテナント)に設定する際に使用します。
TenantB(SAML SPテナント)を設定する
次にSAML SPとなるTenantBの設定です。こちらもテナント自体は作成済みの前提で進めますので、あらかじめ作成しておきましょう。ダッシュボードのテナントをTenantBに切り替えてください。
左メニューの「Connections」の「Enterprise」を開き、「SAMLP Identity Provider」の「+」をクリックします。
いくつかの設定を行います。下記に記載している項目以外はそのままで問題ありません。
項目 | 値 |
---|---|
Connection Name | SAML-SP (自由に設定してください) |
Sign In URL | 事前にコピーしておいたSAML Protocol URL |
X509 Signing Certificate | 事前にダウンロードしておいたPEM形式の証明書ファイル |
Sign Out URL | 事前にコピーしておいたSAML Protocol URL |
「SAVE」をクリックし、設定を完了します。
TenantA(SAML IdPテナント)にTenantB(SAML SPテナント)を設定する
次にTenantA(SAML IdPテナント)に、TenantB(SAML SPテナント)からのSAML認証リクエストを受け付けられるように設定を行います。再度TenantA(SAML IdPテナント)の設定に戻ります。ダッシュボードのテナントをTenantAに切り替えてください。
左メニューから「Applications」を開き、先ほど作成したApplicationの設定を開きます。
「Addons」セクションの「SAML2 SAML2 WEB APP」をクリックします。
「Application Callback URL」に、以下のURLを指定します。
https://【TenantBのドメイン】.auth0.com/login/callback?connection=【TenantBに設定したSAMLP Connection名】
例えば【TenantBのドメイン】が tenant-b
、【TenantBに設定したSAMLP Connection名】が SAML-SP
の場合は以下のURLになります。
https://tenant-b.auth0.com/login/callback?connection=SAML-SP
以上で完了です。
サンプルアプリケーションで試す
最後に、サンプルアプリケーションで動作を確認してみましょう。
TenantB(SAML SPテナント)に新規Applicationを作成します。サンプルアプリケーションの作り方は以下を参考にしてください。
「Connections」タブで今回作成したSAML Connectionだけ有効にしておくと分かりやすいです。
「Login」をクリックするとTenantB(SAML SPテナント)のログイン画面が表示されます。「Login at SAML-SP」が表示されています。
「Login at SAML-SP」をクリックすると、TenantA(SAML IdPテナント)のログイン画面が表示されます。TenantA(SAML IdPテナント)側でユーザーを作成していない場合は「Sign Up」タブでユーザーを新規登録します。
サンプルアプリケーションの認可画面が表示されたあと、サンプルアプリケーションでログイン済みの状態になります。sub
を見てみると、SAMLでログインされたユーザーであることが分かります。
samlp|SAML-SP|auth0|5cd4ece6c01a01110eec67a2
SAML連携を試してみたい場合に活用しよう
今回はAuth0のみでSAML Identity Provider(SAML IdP)としての機能、SAML Service Provider(SAML SP)としての機能を試しました。これは以下のような場合に有用です。
- Auth0の接続先としてSAML IdPを使う予定だが、SAML IdPをモック化して試したい
- Auth0をSAML IdPとして使う予定だが、SAML SPを用意する前にSAML IdPとしての利用方法を知りたい
- SAML連携する環境を開発向けに用意したい
SAMLはエンタープライズ向けのツールやサービスでのユースケースが多いのですが、開発環境が十分に用意できなかったり、環境準備までに時間がかかってしまうことがあります。Auth0をうまく使いこなしながら開発効率を高めましょう!